package models

import (
	"gorm.io/gorm"
)

type User struct {
	gorm.Model
	Username string  `json:"username" gorm:"not null;column:username"` // 用户名不能为空，数据库字段名为 username
	Email    string  `json:"email" gorm:"not null;unique"`             // 邮箱不能为空且唯一
	Password string  `json:"password" gorm:"not null"`                 // 密码不能为空
	Avatar   string  `json:"avatar"`                                   // 头像可为空
	Groups   []Group `json:"groups" gorm:"many2many:user_groups;"`     // 用户与组的多对多关系
	Status   bool    `json:"status" gorm:"not null;default:true"`      // 用户状态,默认启用(true),禁用(false)
	Supper   bool    `json:"supper" gorm:"not null;default:false"`     // 超级用户,默认普通(false),超管(true)
}

type Group struct {
	gorm.Model
	Name  string `gorm:"unique;not null" json:"name"`
	Desc  string `json:"desc"`
	Roles []Role `gorm:"many2many:group_roles;"` // 组与角色的多对多关系
	Users []User `gorm:"many2many:user_groups;"`
}

type Role struct {
	gorm.Model
	Name string `gorm:"unique;not null"`
	Desc string
	// 角色关联的权限列表
	Permissions []Permission `gorm:"many2many:role_permissions;"` // 角色与权限的多对多关系
	Groups      []Group      `gorm:"many2many:group_roles;"`
}

type Permission struct {
	gorm.Model
	Name   string `gorm:"unique;not null" json:"name"`
	Path   string `gorm:"not null" json:"path"`
	Method string `gorm:"not null" json:"method"`
	Action string `gorm:"unique;not null" json:"action"`
	MenuId uint   `gorm:"menu_id" json:"menu_id"`
	Menu   *Menu  `gorm:"foreignKey:MenuId"`
}

type Menu struct {
	gorm.Model
	Name        string `gorm:"unique;not null"`
	Path        string
	OrderNum    uint `gorm:"order_num;not null" json:"order_num"` //显示顺序
	Icon        string
	Level       uint         `gorm:"not null"`                   //菜单级别1,2
	ParentID    *uint        `gorm:"parent_id" json:"parent_id"` // 添加 ParentID 以表示父菜单
	Parent      *Menu        `gorm:"foreignKey:ParentID"`        // 关联到父菜单
	Children    []Menu       `gorm:"foreignKey:ParentID"`        // 子菜单
	Permissions []Permission `gorm:"many2many:menu_permissions"` // 关联的权限
}
